package com.fpx.xms.api.base.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

/**
 * 扩展的spring占位符解析
 * 说明：该类通过应用服务器中配置的jndi，读取控制库中的受环境影响的配置，
 * 如：各数据库jdbc连接属性、其他服务调用地址、或文件目录等
 * @author shiw
 */
public class ExtPropertyConfigurer extends PropertyPlaceholderConfigurer {

    private static Map<String, String> ctxPropertiesMap = new HashMap<String, String>();

    @Override
    protected void loadProperties(Properties props) throws IOException {
        super.loadProperties(props);
//        Connection conn = null;
//        PreparedStatement ps = null;
//        ResultSet rs = null;
//        try {
//            Context initContext = new InitialContext();
//            Context envContext = (Context) initContext.lookup("java:/comp/env");
//            DataSource ds = (DataSource) envContext.lookup("jdbc/EnvconfigDB");
//
//            String sql = "select * from ctr.t_configparam where system=? and active='Y'";
//            conn = ds.getConnection();
//            ps = conn.prepareStatement(sql);
//            ps.setString(1, "XOMS2.0");
//            rs = ps.executeQuery();
//            while (rs.next()) {
//                String name = rs.getString("name");
//                String value = rs.getString("value");
//                props.put(name, value);
//                ctxPropertiesMap.put(name, value);
//            }
//        } catch (Exception e) {
//            String errorStr = "读取数据库连接配置时出错";
//            logger.error(errorStr, e);
//            System.exit(-1);
//        } finally {
//            try {
//                if (rs != null) {
//                    rs.close();
//                }
//                if (ps != null) {
//                    ps.close();
//                }
//                if (conn != null) {
//                    conn.close();
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
    }

    public static String get(String key) {
        String value = ctxPropertiesMap.get(key);
        if (StringUtils.isNotBlank(value)) {
            return value.trim();
        }
        return "";
    }

}
